package com.itlong.cloud.app.dao;

import com.itlong.cloud.POJO.DTO.app.AppElevatorAuthDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <desc>
 *     APP端房间信息数据访问接口
 * </desc>
 * @createDate 2017/10/9
 */
@Mapper
@Repository
public interface IAppRoomDao {

    /**
     * <desc>
     *      根据单元ID获取启用状态的房间信息
     * </desc>
     *
     * @param params 查询参数
     * @return  分页数据集
     * @author cuiduanwu
     * @createDate 2017/09/29
     */
    List<Map<String,Object>> getRoomsInUnit(Map<String,Object> params);
    /**
     * <desc>
     *      根据单元ID获取启用状态的房间的总记录数
     * </desc>
     *
     * @param params 查询参数
     * @return  总条数
     * @author cuiduanwu
     * @createDate 2017/09/29
     */
    Integer getRoomsInUnitCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取用户在项目中已认证的房屋
     * </desc>
     * @param userId 用户id
     * @param projectId 项目id
     * @param owner 是否只查业主 1是 0否
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/27
     */
    List<Map<String,Object>> getUseRoomsByUserIdAndProjectId(@Param("userId")String userId,@Param("projectId")String projectId,@Param("owner") String owner);

    /**
     * <desc>
     *      此处查询单元地址下真实楼层在电梯楼层映射表中的楼层名称
     * </desc>
     * @param unitId 单元id
     * @param floor 真实楼层
     * @return
     * @author Juguang.S
     * @createDate 2021/03/26
     */
    String getUseRoomsFloorName(@Param("unitId")String unitId,@Param("floor")String floor);

    /**
     * <desc>
     *      设置开门密码
     * </desc>
     *
     * @param roomIds 房间id集合
     * @param openPwd 开门密码
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/13
     */
    Integer setOpenPwd(@Param("roomIds") String[] roomIds,@Param("openPwd")String openPwd);

    /**
     * <desc>
     *      获取用户在项目下为业主的房间id
     * </desc>
     *
     * @param projectId 项目id
     * @param userId 用户id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/18
     */
    String getUserProjectRoomIds(@Param("projectId")String projectId,@Param("userId")String userId);

    /**
     * <desc>
     *      获取当前项目APP用户所有房间为业主的房间编号集合
     * </desc>
     *
     * @param userId 用户id
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/11/14
     */
    List<String> getUserHouserTypeWithOneRoomIds(@Param("userId") String userId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      设置业主的房间电话是否可被呼叫
     * </desc>
     * @param roomIds
     * @param userId
     * @param isAllowPhone
     * @return
     */
    Integer setUserRoomAllowPhone(@Param("roomIds") String[] roomIds,
                                     @Param("userId") String userId,
                                     @Param("isAllowPhone") String isAllowPhone);


    /**
     * <desc>
     *      获取当前房屋列表，app2.0版本新增
     * </desc>
     *
     * @param projectId 项目编号
     * @param userId    用户id
     * @return 房屋列表
     * @author wangzhi
     * @createDate 2019/06/27
     */
    List<Map<String,Object>> getHomeList(@Param("projectId") String projectId, @Param("userId") String userId);

    /**
     * <desc>
     *      查询房间剩余通行次数
     * </desc>
     *
     * @param roomIds
     * @return
     * @author Jiaqi.X
     */
    List<Map<String,Object>> getRoomLastCountByRoomId(@Param("roomIds") Set<String> roomIds);

    /**
     * <desc>
     * 查询用户通过分组方式进行授权设备
     * </desc>
     *
     * @param userId
     * @param projectId
     * @return
     * @author Juguang.S
     * @createDate 2021/03/26
     */
    List<AppElevatorAuthDTO> getFloorAuth(@Param("userId") String userId, @Param("projectId") String projectId);

    /**
     * <desc>
     * 查询指定设备楼层的楼层名称及所属地址
     * </desc>
     *
     * @param deviceUnique
     * @param liveFloorArr
     * @return
     * @author Juguang.S
     * @createDate 2021/03/26
     */
    List<Map<String,Object>> getLogciaFloorAndAddressByDeivecUnique(@Param("deviceUnique") String deviceUnique, @Param("liveFloorArr") String[] liveFloorArr);
}
